﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Grupo2.Dominio;
using System.Data.SqlClient;

namespace Grupo2.Persistencia
{
    public class ReferenciaPersonalDAO
    {
        //Atributos
        //private String cadenaConexion = "Data Source=LOCALHOST;Initial Catalog=Grupo2;User Id=grupo2;Password=grupo2;";
        private String cadenaConexion = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Grupo2;Data Source=localhost";
        
        private SqlConnection conexion;

        public ReferenciaPersonalDAO()
        {
            conexion = new SqlConnection(cadenaConexion);
        }

        //Creando una Referencia Personal
        public ReferenciaPersonal CrearReferenciaPersonal(ReferenciaPersonal referenciaPersonal)
        {
            conexion.Open();
            String sentencia = "INSERT INTO Referencia_Personal ( " +
                                            "Id_Referencia_Personal,"+
                                            "Id_Postulante,"+
                                            "Nombres,"+
                                            "Apellidos,"+
                                            "Empresa,"+
                                            "Cargo,"+
                                            "Telefono,"+
                                            "Email"+
                                            ")" +
                                            "VALUES (" + 
                                                    referenciaPersonal.Id_Referencia_Personal + "," +
                                                    referenciaPersonal.Postulante.Id_Postulante + ",'" + 
                                                    referenciaPersonal.Nombres + "','" + 
                                                    referenciaPersonal.Apellidos + "','" + 
                                                    referenciaPersonal.Empresa + "','" +                                                     
                                                    referenciaPersonal.Cargo + "','" + 
                                                    referenciaPersonal.Telefono + "','" + 
                                                    referenciaPersonal.Email + 
                                                    "')";
            
            SqlCommand comando = new SqlCommand(sentencia, conexion);
            comando.ExecuteNonQuery();
            conexion.Close();
            return this.ObtenerReferenciaPersonal(referenciaPersonal.Id_Referencia_Personal); //TODO: Queda pendiente de devolver objeto creado
        }

        //Obteniendo una Referencia Personal
        public ReferenciaPersonal ObtenerReferenciaPersonal(Int32 Id_Referencia_Personal)
        {
            conexion.Open();

            String sentencia = "SELECT * FROM Referencia_Personal WHERE Id_Referencia_Personal = " + Id_Referencia_Personal + " ";

            SqlCommand comando = new SqlCommand(sentencia, conexion);
            SqlDataReader resultado = comando.ExecuteReader();

            ReferenciaPersonal referenciaPersonal = new ReferenciaPersonal();

            if (resultado.HasRows) //Si el resultado tiene filas, llenamos el objeto
            {
                resultado.Read(); //Avanzar el índice de la lista de la fila 0 a la fila 1
                //referenciaPersonal.Id_Referencia_Personal = (Int32)resultado["Id_Referencia_Personal"];
                referenciaPersonal.Id_Referencia_Personal = Convert.ToInt32(resultado["Id_Referencia_Personal"]);
                //referenciaPersonal.Postulante.Id_Postulante = (Int32)resultado["Id_postulante"];
                referenciaPersonal.Postulante.Id_Postulante = Convert.ToInt32(resultado["Id_postulante"]);
                referenciaPersonal.Nombres = (String)resultado["Nombres"];
                referenciaPersonal.Apellidos = (String)resultado["Apellidos"];
                referenciaPersonal.Empresa = (String)resultado["Empresa"];
                referenciaPersonal.Cargo = (String)resultado["Cargo"];
                referenciaPersonal.Telefono = (String)resultado["Telefono"];
                referenciaPersonal.Email = (String)resultado["Email"];
            }
            else // Retornamos una excepción si no existe el registro en la BD
            {
                //throw new Exception("El codigo solicitado no existe en la BD");
                referenciaPersonal = null;
            }
            conexion.Close();
            return referenciaPersonal;
        }

        //Modificando una Referencia Personal
        public ReferenciaPersonal ModificarReferenciaPersonal(ReferenciaPersonal referenciaPersonal)
        {
            ReferenciaPersonal referenciaPersonalRegistrado = this.ObtenerReferenciaPersonal(referenciaPersonal.Id_Referencia_Personal);
            String sentencia = "UPDATE Referencia_Personal " +
                                "SET " +
                                    "Id_Postulante=@Id_Postulante, " +
                                    "Nombres=@Nombres, " +
                                    "Apellidos=@Apellidos, " +
                                    "Empresa=@Empresa, " +
                                    "Cargo=@Cargo, " +
                                    "Telefono=@Telefono, " +
                                    "Email=@Email, " +
                                    "WHERE " +
                                    "Id_Referencia_Personal=@Id_Referencia_Personal";
            this.conexion.Open();
            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter Id_Referencia_Personal = new SqlParameter("@Id_Referencia_Personal", System.Data.SqlDbType.Int);
                Id_Referencia_Personal.Value = referenciaPersonal.Id_Referencia_Personal;
                comando.Parameters.Add(Id_Referencia_Personal);

                SqlParameter Id_Postulante = new SqlParameter("@Id_Postulante", System.Data.SqlDbType.Int);
                Id_Postulante.Value = referenciaPersonal.Postulante.Id_Postulante;
                comando.Parameters.Add(Id_Postulante);

                SqlParameter Nombres = new SqlParameter("@Nombres", System.Data.SqlDbType.NVarChar);
                Nombres.Value = referenciaPersonal.Nombres;
                comando.Parameters.Add(Nombres);

                SqlParameter Apellidos = new SqlParameter("@Apellidos", System.Data.SqlDbType.NVarChar);
                Apellidos.Value = referenciaPersonal.Apellidos;
                comando.Parameters.Add(Apellidos);

                SqlParameter Empresa = new SqlParameter("@Empresa", System.Data.SqlDbType.NVarChar);
                Empresa.Value = referenciaPersonal.Empresa;
                comando.Parameters.Add(Empresa);

                SqlParameter Cargo = new SqlParameter("@Cargo", System.Data.SqlDbType.NVarChar);
                Cargo.Value = referenciaPersonal.Cargo;
                comando.Parameters.Add(Cargo);

                SqlParameter Telefono = new SqlParameter("@Telefono", System.Data.SqlDbType.NVarChar);
                Telefono.Value = referenciaPersonal.Telefono;
                comando.Parameters.Add(Telefono);

                SqlParameter Email = new SqlParameter("@Email", System.Data.SqlDbType.NVarChar);
                Email.Value = referenciaPersonal.Email;
                comando.Parameters.Add(Email);

                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
            return this.ObtenerReferenciaPersonal(referenciaPersonal.Id_Referencia_Personal);
        }

        //Eliminando una Referencia Personal
        public void EliminarReferenciaPersonal(Int32 Id_Referencia_Personal_A_Eliminar)
        {
            String sentencia = "DELETE FROM Referencia_Personal WHERE Id_Referencia_Personal=@Id_Referencia_Personal_A_Eliminar";
            this.conexion.Open();

            using (SqlCommand comando = new SqlCommand(sentencia, this.conexion))
            {
                SqlParameter pk = new SqlParameter("@Id_Referencia_Personal_A_Eliminar", System.Data.SqlDbType.NVarChar);
                pk.Value = Id_Referencia_Personal_A_Eliminar;
                comando.Parameters.Add(pk);
                comando.ExecuteNonQuery();
            }
            this.conexion.Close();
        }

    }
}